package com.sojson.config.bean;

import static com.sojson.util.SpringUtil.registerBean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

import com.sojson.util.MavenUtil;
import com.sojson.util.file.enums.EPackageType;

import lombok.extern.slf4j.Slf4j;

/**
 * 手动注册Bean(优先级全场第二高)
 * 
 * @author liu
 * @date 2021-04-28
 */
@Slf4j
@Configuration
public class CustomBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

    /**
     * 在{@link org.springframework.context.annotation.Condition}之后调用<BR/>
     * 在{@link PropertiesPlaceholder}之前调用<BR/>
     */
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        // 注册bean
        log.info("开始手动注册Socket基础Bean对象！");

        if (EPackageType.JAR.getSuffix().equals(MavenUtil.getPackaging())) {
            // 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket
            // 1.如果是使用Springboot内置的 Tomcat此配置必须,如果是使用的是外部Tomcat容器此步骤请忽略,因为它将由容器自己提供和管理
            registerBean(registry, ServerEndpointExporter.class);
            log.info("ServerEndpointExporter手动注入成功！");
        }

        log.info("手动注册Socket基础Bean对象结束！");
    }

    /**
     * 在{@link PropertiesPlaceholder}之后调用
     */
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }

}